package br.unifor.ads.pjappfinanceiro.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.pjappfinanceiro.entity.Clientes;

public class ClientesDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {
			Clientes cliente = new Clientes();
			cliente.setId(resultSet.getInt("id_cliente"));
			cliente.setNome(resultSet.getString("nome_cli"));
			cliente.setEndereco(resultSet.getString("endereco_cli"));
			cliente.setCep(resultSet.getString("cep_cli"));
			cliente.setBairro(resultSet.getString("bairro_cli"));
			cliente.setEstado(resultSet.getString("estado_cli"));
			cliente.setFone(resultSet.getString("fone_cli"));
			cliente.setFax(resultSet.getString("fax_cli"));
			cliente.setEmail(resultSet.getString("email_cli"));
			cliente.setCpf(resultSet.getString("cpf_cli"));
			cliente.setRg(resultSet.getString("rg_cli"));
			return cliente;
		}
	};

	public Clientes salvar(Clientes cliente) throws SQLException {

		String sql = "insert into tb_clientes(nome_cli, endereco_cli, "
				+ "cep_cli, bairro_cli, estado_cli, fone_cli, fax_cli, "
				+ "email_cli, cpf_cli, rg_cli) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
				+" returning id_cliente, nome_cli, endereco_cli, "
				+ "cep_cli, bairro_cli, estado_cli, fone_cli, fax_cli, "
				+ "email_cli, cpf_cli, rg_cli ";
		return (Clientes)em.getSingleResult(sql, cliente.getNome(), cliente.getEndereco(),
				cliente.getCep(), cliente.getBairro(), cliente.getEstado(),
				cliente.getFone(), cliente.getFax(), cliente.getEmail(),
				cliente.getCpf(), cliente.getRg());
	}

	public void atualizar(Clientes cliente) throws SQLException {

		String sql = "update tb_clientes set nome_cli = ?, endereco_cli = ?, "
				+ "cep_cli = ?, bairro_cli = ?, estado_cli = ?, fone_cli = ?, fax_cli = ?, "
				+ "email_cli = ?, cpf_cli = ?, rg_cli = ? where id_cliente = ?  ";
		em.executeQuery(sql, cliente.getNome(), cliente.getEndereco(),
				cliente.getCep(), cliente.getBairro(), cliente.getEstado(),
				cliente.getFone(), cliente.getFax(), cliente.getEmail(),
				cliente.getCpf(), cliente.getRg(), cliente.getId());

	}

	public void excluirPorId(Integer id) throws SQLException {
		String sql = "delete from tb_clientes where id_cliente = ?";
		em.executeQuery(sql, id);
	}

	public void excluirTodos() throws SQLException {

		String sql = "delete from tb_clientes";
		em.executeQuery(sql);
	}

	public Clientes buscarPorId(Integer id) throws SQLException {

		String sql = "select id_cliente, nome_cli, endereco_cli, "
				+ "cep_cli, bairro_cli, estado_cli, fone_cli, fax_cli, "
				+ "email_cli, cpf_cli, rg_cli "
				+ "from tb_clientes where id_cliente = ?";
		return (Clientes) em.getSingleResult(sql, id);
	}

	public Clientes buscarPorCPF(String cpf) throws SQLException {

		String sql = "select id_cliente, nome_cli, endereco_cli, "
				+ "cep_cli, bairro_cli, estado_cli, fone_cli, fax_cli, "
				+ "email_cli, cpf_cli, rg_cli "
				+ "from tb_clientes where cpf_cli = ?";
		return (Clientes) em.getSingleResult(sql, cpf);
	}
	
	
	@SuppressWarnings("unchecked")
	public List<Clientes> buscarTodos() throws SQLException {
		String sql = "select id_cliente, nome_cli, endereco_cli, "
				+ "cep_cli, bairro_cli, estado_cli, fone_cli, fax_cli, "
				+ "email_cli, cpf_cli, rg_cli from tb_clientes";
		return (List<Clientes>) em.getResultList(sql);
	}

}
